//策略模式，实现了在指定条件中执行方法
// 策略模式，实现了在指定条件中执行方法
// 可以实现抹平各个浏览器的方法
// 比如：登录分享功能，在微信、企业微信、钉钉、普通浏览器调用的API不同，本库可以实现无副作用抹平
// this.device.setShare()
//  逻辑判断 只在 企业微信 微信中执行
// this.device.at(['workWX','WX',],()=>{
//   
// });

// 无副作用执行，方法
//  设置分享配置
// this.device().setShare({});

import platformList from './platforms/index';

class Device {
  constructor() {
    // 初始化 符合条件的 platform
    this.platform = platformList.find(p => p.condition());
    // 
    this.platformKeys = platformList.reduce((t, n) => {
      t[n.key] = n.key;
      return t;
    }, {});

  }
  // 在某些平台下执行
  at(platformArr, cb) {
    if(Object().toString.call(platformArr).indxOf('Array')==-1||!platformArr.length){
      return false;
    }
 
    platformArr.some(k => k == this.platform.key) && cb()

  }
};
// 当前设备
const device = new Device();
// 设备代理对象
const deviceProxy = new Proxy(device, {
  // 只读
  set: "Read-Only",
  // 获取值时的捕获器
  get: function (target, key) {
    // 如果当前对象没有就去当前平台找
    if (target[key]) {
      return target[key];
    } else if (target.platform[key]) {
      return target.platform[key];
    } else {
      console.error('当前平台不支持',key);
    }
  },
})


export default deviceProxy; 